#!/usr/bin/env python
#coding: utf-8
# Implementação " erônea " ( Vide t e x t o e x p l i c a t i v o a b a i x o )
def f( arg =[] ): # Errado ! ! !
  return arg

a = f()
b = f()
print a # imprime [ ]
print b # imprime [ ]
a += [ 1 ]
print a # imprime [ 1 ]
print b # imprime [ 1 ] tambm ! ! !


# Implementac~ao c o r r e t a :
def f( arg = None ):
  a = arg or [] # Mesmo que : ` i f arg : a=arg e l s e a=[ ] '
  return a

a = f()
b = f()
print a # imprime [ ]
print b # imprime [ ]
a += [ 1 ]
print a # imprime [ 1 ]
print b # imprime [ ]

"""
Note que a implementac~ao acima n~ao est errada (por isso as aspas na palavra err^onea).
apenas um recurso da linguagem que voc^e tem que saber usar. Em geral queremos que o
par^ametro seja algo novo, que possa ser usado como no exemplo. Porm, certas vezes desejase
usar uma nica inst^ancia para todas as chamadas e seria correto usar essa inst^ancia como
valor, obtendo-se o funcionamento desejado (como para \singletons"). O mesmo vale para os
atributos de classe versus atributos de inst^ancia.
"""
